iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
自我挑戰組

Practice again& again.系列 第 13

Android - Compose UI 設定字串資源樣式

  • 分享至 

  • xImage
  •  

前言

因官方尚未支援,目前尚無法使用上一章節包含 HTML 語法的字串資源於 Compose UI。

  • strings.xml
    <string name="hello"> Hello </string>
    <string name="world"> world ! </string>
    
  • MainActivity.kt
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        Box(
            modifier = Modifier
                .fillMaxSize(),
            contentAlignment = Alignment.Center
        ) {
            Text(
                //==================呼叫字串資源===================
                text = getString(R.string.hello_world)
                //===============================================
            )
        }
    ...
    
  • 啟動專案:呈現文字並未符合HTML樣式
    img1

Compose UI 設定字串資源樣式

  • strings.xml
    將不同樣式設定的字串拆分為各別獨立字串:
    <string name="hello"> Hello </string>
    <string name="world"> world ! </string>
    
  • Compose UI 內設定樣式
    • 設定樣式:SpanStyle(屬性內容) 設定文字樣式。SpanStyle(fontWeight = FontWeight.Bold)即設定文字為粗體。
    • 套用樣式:
      buildAnnotatedString {
          withStyle(style = 樣式A) {
              append(字串內容A)
          }
          withStyle(style = 樣式B) {
              append(字串內容B)
          }
          ...
      }
      
  • MainActivity.kt
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        //========== 使用 buildAnnotatedString 設定樣式 ==========
        val boldStyle = SpanStyle(fontWeight = FontWeight.Bold) 
        val annotatedString = buildAnnotatedString {
            withStyle(style = boldStyle) {
                append(getString(R.string.hello))
            }
            append(getString(R.string.world))
        }
        //=======================================================
    
        setContent {
            Box(
                modifier = Modifier
                    .fillMaxSize(),
                contentAlignment = Alignment.Center
            ) {
                Text(
                    //======== 設定 text 屬性值 ==========
                    text = annotatedString
                    //==================================
    
  • 啟動專案:文字樣式符合預期呈現
    img2

上一篇
Android - String Resources 字串樣式
下一篇
Android - String Resources 語系
系列文
Practice again& again.30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言